Вы обращали внимание на то, что у всех икон в SysTray существует подсказка ? Для её существования необходимо в структуру заполнить поле посказки, правильно выставить флаги.
void CTestSystrayDlg::OnButton1()
{
NOTIFYICONDATA nf;
nf.hWnd = m_hWnd;
nf.uID = NULL;
nf.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
nf.uCallbackMessage = WM_MYICONNOTIFY;
strcpy(nf.szTip,"Hello Systray");
HICON hIcon;
hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);
nf.hIcon = hIcon;
Shell_NotifyIcon(NIM_ADD,&nf);
}
Я хочу и получать сообщения в окно при двойном щелчке на кнопке. Для этого
необходимо завести свое сообщение. //{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by TestSystray.rc
//
........
#define IDC_BUTTON2 1001
#define WM_MYICONNOTIFY WM_USER+1
// Next default values for new objects
//
.......
Передать его в структуру. nf.uCallbackMessage = WM_MYICONNOTIFY;Описать реакцию на него в карте сообщений
BEGIN_MESSAGE_MAP(CTestSystrayDlg, CDialog) ...... //}}AFX_MSG_MAP ON_MESSAGE(WM_MYICONNOTIFY,OnIcon) END_MESSAGE_MAP()Описать функцию, которая будет вызвана в ответ на это сообщение
/////////////////////////////////////////////////
// CTestSystrayDlg dialog
class CTestSystrayDlg : public CDialog
{
// Construction
public:
void OnIcon(WPARAM wp, LPARAM lp);
......
};
И её реализацию проверим LPARAM на тип сообщений:
void CTestSystrayDlg::OnIcon(WPARAM wp, LPARAM lp)
{
if (lp==515) AfxMessageBox("Click");
}
Код этой функции будет вызываться на любое сообщение. А вот 512 - это двойной щелчок.
Собирайте приложение. Создайте иконку в SysTray щелкните на неё два раза и ваше диалоговое окно среагирует.